import axios from 'axios'
import { MessageBox, Message } from 'element-ui'
import { getToken } from '@/utils/auth'
import store from '@/store'

// 创建 axios 实例
const service = axios.create({
	//基础路径
	baseURL: process.env.VUE_APP_BASE_API,
	//请求超时时间   （5s内没响应就失败了）
	timeout: 5000
})

//请求拦截器  
service.interceptors.request.use((config) => {
	//判断是否有token
	if(store.getters.token){
		//存在token，设置请求头
		config.headers['token'] = getToken()
	}
	return config
}, (error) => {
	//请求失败的返回
	return Promise.reject(error)
})

//响应拦截器
service.interceptors.response.use((response) => {
	const res = response.data
	//响应过滤
	if (res.code !== 200) {
		//消息提示
		Message({
			message: res.msg || 'Error',
			type: 'error',
			duration: 5 * 1000
		})
		//错误信息处理
		return Promise.reject(new Error(res.msg || 'Error'))
	} else {
		return res
	}

}, (error) => {
	//后端抛出
	const { data } = error.response
	
	//状态码判断，当前的token已经失效，重新登录
	if(data.code === 50002){
		MessageBox.confirm('您的登录时间超时了，请返回首页后重新登录', {
			confirmButtonText: '重新登录',
			cancelButtonText: '取消',
			type: 'warning'
		}).then(() => {
			//确认就调用vuex中的重置token方法，跳转到登录页
			store.dispatch('user/resetToken').then(() => {
				location.reload()
			})
		}).catch(() => {
			//确认就调用vuex中的重置token方法，跳转回首页
			store.dispatch('user/resetToken').then(() => {
				location.reload()
			})
		})
	}else{
		//消息提示
		Message({
			message: data.msg || 'Error',
			type: 'error',
			duration: 5 * 1000
		})
	}
	
	//响应失败的返回
	return Promise.reject(data)
	
})

export default service
